package strings;

/**
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
 * <p>
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * <p>
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 */
public class N541_ReverseStringII {
    public String reverseStr(String s, int k) {
        char[] str = s.toCharArray();
        for (int i = 0; i < str.length; i += 2 * k) {
            int left = i, right = Math.min((left + k - 1), (str.length - 1));
            while (left < right) {
                str[left] ^= str[right];
                str[right] ^= str[left];
                str[left] ^= str[right];
                right--;
                left++;
            }
        }
        return new String(str);
    }

    public static void main(String[] args) {
        N541_ReverseStringII solution = new N541_ReverseStringII();
        String str = "aba";
        int k = 2;
        System.out.println(solution.reverseStr(str, 2));
    }
}
